<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script type="text/javaScript">

      // 定义一个函数,判断一个数字是否是偶数,如果是可以返回true,否则返回false

      function isOu(a) {
          let b;
          if (a % 2 == 0) {
            b = true  ;
          }
          else{
              b = false;
          };

          return b;
          // 简单的办法
          // return a % 2 == 0
          // 这个式子本身的结果本身就是一个false与true;

      };
          let Number1 = isOu(1);
      console.log("这个数字是不是偶数"+Number1);


      // 定义一个函数,可以根据半径结果计算一个圆的面积,并返回结果

      function round(a) {
          b=3.14*a*a;
          return b;
          // 简洁版本,可以直接返回值,没必要再赛个变量
          // return 3.14*a*a;
      };
      let area = round(2);
      console.log("area="+area);


      // 写一个输出个人基本信息的函数

          /*
              实参可以是任意的数据类型,也可以是一个对象
                  当我们参数过多时,可以将参数封装到一个对象中,然后通过对象传递.
          */

                          // 这样子调用可以让数据不会出错,就算调换顺序也不会导致数据错乱,因为只需要把对象中的属性写对了,对照对了,就不会出错.

          function sayhello(o){
              console.log(o);
              console.log("我名字叫"+o.name,"岁数是"+o.age,"性别"+o.gender,"地址是"+o.addree);
          }

              //创建一个对象
          let obj = {
              name:"HPX",
              age:21,
              gender:"男",
              addree:"XXX"
          };
          // 在传递实参的时候,传递的并不是变量本身,而是变量中存储的值;
          sayhello(obj);
          /*
              实参可以是一个对象,也可以是一个函数
          */

          function fun(a){
              console.log("a="+a);
              // a(obj);
          }

          // fun(sayhello);
          fun(function(){

          });

          fun(round);


          fun(round(1));
          // 相当于吧round这个函数的运算结果返回值作为实参了
          // 结果是a= 3.14
          /*
              round()
                  -调用函数
                  - 相当于使用的是函数的返回值
              round
                  -函数对象
                  -相当于直接使用函数对象;
          */
          function fun1(a) {
              a = {},//修改变量,只会影响当前变量
              a.name = "GGG",//修改对象的时候,如果有其他变量指向该对象,则所有指向该对象的修改都会受到影响
              console.log(a.name)
          }
          let obj1 = {
              name:"GPS"
          };
          fun1(obj1);
          console.log(obj1);

          function fun2(a = {name:"你爹"}){
              console.log(a.name),
              a.name = "这那",
              console.log(a.name)
          }
          fun2()
          fun2(obj1)
          fun2(obj1)
    </script>
  </head>
  <body></body>
</html>
